'''使用参数化定义接口测试用例
使用uinttest
1.导包
2.创建测试类
    2.1前置处理
    2.2后置处理
    2.3创建测试方法
'''
#1.导包
import json
import requests
import unittest
from tpshop.api.login import loginAPI #导入封装的api包
from parameterized import parameterized

#构造数据
def build_data():
    file = "./data/login.json" #./为从上级目录，../为上上级目录
    test_data =[]
    with open(file, encoding='utf-8') as f:
        json_data = json.load(f) #加载json数据
        for case_data in json_data:
            username = case_data.get("username")
            password = case_data.get("password")
            verify_code = case_data.get("verify_code")
            content_type = case_data.get("content_type")
            status = case_data.get("status")
            msg = case_data.get("msg")
            test_data.append((username, password, verify_code, content_type, status, msg))
            print(test_data)
    return test_data
#2.创建测试类
class Testlogin(unittest.TestCase):
    #2.1前置处理
    def setUp(self):
        self.login_api = loginAPI() #示例化接口类，方便使用self调用
        self.session = requests.Session() #创建session对象
    #2.2后置处理
    def tearDown(self):
        if self.session:
            self.session.close()  #关闭session对象

    @parameterized.expand(build_data())
    #2.3创建测试方法
    #登录
    def test001(self, username, password, verify_code, content_type, status, msg):
        #调用验证码接口获取验证，并进行断言
        respones1 = self.login_api.get_verify(self.session)
        self.assertIn(content_type, respones1.headers.get('Content-Type'))

        #调用登录接口获取登录信息，并进行断言
        respones2 = self.login_api.login(self.session, username, password, verify_code)
        print(respones2.json())
        self.assertEqual(status, respones2.json().get('status'))
        self.assertIn(msg, respones2.json().get('msg'))